package com.simon.train.member.controller;


import com.simon.train.common.Result.Result;
import com.simon.train.common.context.LoginMemberContext;
import com.simon.train.common.vo.PageVO;
import com.simon.train.member.dto.PassengerQueryDto;
import com.simon.train.member.dto.PassengerSaveDto;
import com.simon.train.member.service.PassengerService;
import com.simon.train.member.vo.PassengerQueryVO;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/passenger")
public class PassengerController {

    @Resource
    private PassengerService passengerService;

    /**
     * 保存和更新update二合一的接口
     * 新增乘车人的接口
     * 修改乘车人信息的接口 根据id是否为空进行判断
     * @param passengerSaveDto
     * @return
     */
    @PostMapping("/save")
    public Result<Object> SavePassenger(@Valid @RequestBody PassengerSaveDto passengerSaveDto){
        passengerService.SavePassenger(passengerSaveDto);
        return new Result<>();
    }

    /**
     * 乘车人信息查询接口
     * @param passengerQueryDto
     * @return
     */
    @GetMapping("/queryList")
    public Result<PageVO<PassengerQueryVO>> PassengerQueryList(@Valid PassengerQueryDto passengerQueryDto){
         /**
         * memberId通过线程变量获取 从而不需要由前端传入 保证了效率和安全性
         */
        passengerQueryDto.setMemberId(LoginMemberContext.getId());
        PageVO<PassengerQueryVO> lists = passengerService.QueryPassengerList(passengerQueryDto);
        return new Result<>(lists);
    }

    /**
     * 删除乘车人的接口
     * 通过路径参数传入要删除的乘车人的id即可
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public Result<Object> DeletePassenger(@PathVariable("id") Long id){
        passengerService.deletePassenger(id);
        return new Result<>();
    }

    /**
     * 通过本地线程变量存储的会员id来查询其对应的所有的乘客信息
     * @return
     */
    @GetMapping("/queryById")
    public Result<List<PassengerQueryVO>> QueryAllPassengersByMemberId(){
        List<PassengerQueryVO> passengerQueryVOList = passengerService.QueryAllPassengersByMemberId();
        return new Result<>(passengerQueryVOList);
    }

}
